home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
FM Towns: Free Software Collection 7
/
FM Towns Free Software Collection 7.iso
/
t_os
/
komei4
/
komei4.exe
/
ICON
/
C_3B3.HD6
< prev
next >
Wrap
Text File
|
1993-06-04
|
12KB
|
912 lines
ds_name db 'MOJ\C_3B',0
;----------------------------------
; パレットノートに関するモジュール
; 右下の5つのアイコンと数字
dt1:
call sub_edi
dw 0
db 'CONTEN',0
;-------------------------
paint_wd:
SET_P dt1
;パレット0 の情報獲得
call palon0
call pal0_get
;念の為にパレットブックの制作
call b_note
;ユーザーアイコンのロードとセット
call u_icon_set
call n_load ;パレットノートのロード
mov cx,1 ;パレット番号
mov bx,00101000b ; 画面1のパレット/画面 0 が上
mov ah,100
mov al,33
call komei ;palet page -> palet
call dd_pal
mov word ptr [edx],1
re_paint:
WD_CLS 0
BOX boxdt,8
call di_ucon2 ;icon3
call u_con ;rom_con
MOZI mozidt
BOX boxdt2,1
MOZI mozidt3
ret ; RET TO KOMEI
re_paint1:
call kesu_ms
jmp re_paint
;***************************
be_called: ;他のモジュールから呼ばれる時の入口。
YOMU ax,300
cmp ax,400
je neru
cmp ax,500
je okiru
ret
neru:
WD_ERZ 1
WD_ERZ 0
WD_LEFT
ret
okiru:
WD_WANT
jmp re_paint
;**************************
rom_con:
mov ah,100
mov al,29
jmp komei1
;---------------------
u_con:
mov ah,2
mov al,0
call MOUSE
mov ah,100
mov al,30
call komei1
mov ah,2
mov al,1
call MOUSE
ret
;**********************************
u_icon_set:
call e_data1
call f_size
call ds_size
mov [esi],ecx
RAM0 edi
call e_data1
call load
call ds_size
mov ecx,[esi]
push es
mov ax,114h
mov es,ax
mov edi,1024*3+512*3*64
RAM0 ebx
mov esi,ebx
rep movsb
pop es
mov ah,100
mov al,36 ;2c icon data の場所
mov dx,114h
mov edi,1024*3+512*3*64
call komei
ret
;**************************************
e_data1:
call sub_edx
db 'ICON\HTG\NO1.HTG',0
ds_size:
call sub_esi
dd ?
f_size:
M_BYTESU
load:
M_LOAD
save:
M_SAVE
p_call:
M_P_CALL
p_set:
M_P_SET
;-----------------------------
;S_NO,X1,Y1,COL,off_x,off_y,NO,no,no,0
di_ucon2:
call sub_edi
dw 0,1,1,1,33,0,41,37,36,38,10,12,0
;-----------------------------------
;*****************************
mouse_in:
cmp ch,0
jne mouseck
ret
mou_dt:
call sub_edi
dw 0
dw 0
mouseck:
call mou_dt
mov [edi],cx
MOU boxdt,8
cmp bx,1
je short mck1
ret
mck1:
cmp ax,2
je find2
cmp ax,3 ;palet <- palet note
je find4
cmp ax,4 ;palet -> palet note
je find3
cmp ax,5
je note_save0
cmp ax,6
je n_load
cmp ax,7
jge find5
ret
;*************
note_save0:
BOX boxdt3,1
MOZI mozidt2
BOX boxdt,6
call di_con_01
call u_con
call kesu_ms
ok_no1:
call ck_mouse
cmp ch,1
jne ok_no1
MOU boxdt,3
cmp bx,1
jne ok_no1
cmp ax,3
je re_paint1
cmp ax,2
je ok_no1
note_save: ;palet note save
RAM0 edi
mov esi,0
push ds
push ds
pop es
mov ax,114h
mov ds,ax
mov ecx,1024*3
cld
rep movsb ;スプライトラムよりノートを複写
pop ds
call note_name
RAM0 edi
mov ecx,1024*3
call save
jmp re_paint
;***********************
note_name:
call sub_edx
db 'ICON\P_NOTE\NO1.PNT',0
n_load: ;palet note load
call note_name
RAM0 edi
call load ;note load
RAM0 edi
mov esi,0
xchg esi,edi
mov ax,114h
mov es,ax
mov ecx,1024*3
cld
rep movsb ;スプライトラムにノートを複写
push ds
pop es
mov ah,100 ;念の為に番地を知らせる
mov al,32
mov dx,114h
mov edi,0
call komei
ret
;***********************
find1:
ret
;**********************
find2:
;マウスが押されている間パレットを見せる
cld
call mou_dt
mov ax,[edi+2]
cmp ax,0
jne f2_1 ;パレットページの変更無し
mov word ptr [edi+2],1
; パレットページを読み込む to ds_pal1
call from_note
f2_1:
;念のため 今のパレットを ds_pal0 に 保存
call palon1
call pal0_get ;ds_pal0
call palon1
call ds_pal1
mov ecx,16 ;ds_pal1 data set
call p_set1
f2_2:
call ck_mouse
cmp ch,0
jne f2_2
call palon1
call ds_pal0
mov ecx,16 ;ds_pal0 data set
call p_set1
ret
ck_mouse: ;mouse check macro
M_KENMS
;***********************************
di_con_01:
call sub_edi
dw 0,1,1,1,33,0,18,33,20,0
find3:
BOX boxdt2,1
MOZI mozidt1
BOX boxdt,6
call di_con_01
call u_con
call kesu_ms
ok_no:
call ck_mouse
cmp ch,1
jne ok_no
MOU boxdt,3
cmp bx,1
jne ok_no
cmp ax,3
je re_paint1
cmp ax,2
je ok_no
; 今のパレットを パレットノートに 読み込む
call palon1
call pal1_get ;ds_pal1
;palet note に 送る
call to_note
call kesu_ms
call re_paint
ret
;**********************************
find4:
; ds_pal1 -> ds_pal0
call ds_pal0
mov edi,esi
call ds_pal1
cld
mov ecx,3*16
rep movsb
;--------------------
call palon1
call ds_pal0
mov ecx,16 ;ds_pal0 data set
call p_set1
;----------------
; パレットの変わった事を知らせる
KAKU word ptr 300,1
CALL_P dt1
ret
;**************************************
find5: ;10 + -
call mou_dt
mov cx,[edi]
cmp ax,8
je find6
call dd_pal
mov ax,[edx]
cmp ch,2
je gen_f5
cmp ax,53
jl f5_1
ret
f5_1:
add ax,10
jmp gokei
gen_f5:
cmp ax,10
jge gf5_1
ret
gf5_1:
sub ax,10
jmp gokei
find6:
call dd_pal
mov ax,[edx]
cmp ch,2
je gen_f6
cmp ax,63
jl f6_1
ret
f6_1:
inc ax
jmp gokei
gen_f6:
cmp ax,1
jge gf6_1
ret
gf6_1:
dec ax
gokei:
call dd_pal
mov [edx],ax
mov bl,10
div bl
add ax,3030h
call mozidt
mov [edi+14],al
mov [edi+16],ah
BOX boxdt1,2
MOZI mozidt
call mou_dt
mov word ptr [edi+2],0
call kesu_ms
;マウスが押されている間パレットを見せる
cld
call mou_dt
mov ax,[edi+2]
cmp ax,0
jne t2_1 ;パレットページの変更無し
mov word ptr [edi+2],1
; パレットページを読み込む to ds_pal1
call from_note
t2_1:
;念のため 今のパレットを ds_pal0 に 保存
call palon1
call pal0_get ;ds_pal0
call palon1
call ds_pal1
mov ecx,16 ;ds_pal1 data set
call p_set1
mov ecx,0
t2_2:
inc ecx
cmp ecx,500000/2
jbe t2_2
call palon1
call ds_pal0
mov ecx,16 ;ds_pal0 data set
call p_set1
ret
kesu_ms: ;mouse の信号が 0になるまで待つ
M_KESUMS
dd_pal:
call sub_edx
dw 0
look_me:
call sub_esi ; esi 固定です。
dd 0,0
dw 1 ; ここが 1 の物は open start です。
dw 0
dw 33*6,70,256+120,256+150,15,0,0,0
boxdt:
call sub_edi ; edi 固定です。
dw 6,32,32,1,1,33,0,11,15,0
dw 2,20,20,1,40,21,0,15,0,0
boxdt3:
call sub_edi
dw 1,33*6-5,20,1,40,21,0,15,0,0
boxdt2:
call sub_edi
dw 1,33*6-47,20,7+40,40,21,0,15,0,0
boxdt1:
call sub_edi
dw 2,20,20,1,40,21,0,15,0,0
icon1:
call sub_edi
dw 0,1,1,1,33,0,250,108,168,0
mozidt:
call sub_edi
dw 0 ;screen_no
dw 15 ; mozi_color
dw 7 ; 書き出し位置 x
dw 38 ; y
dw 25 ; next offset x
dw 0 ; next offset y
dw 2 ; gyo suu
db '0',0
db '1',0
dw 0,0
mozidt1:
call sub_edi
dw 0 ;screen_no
dw 15 ; mozi_color
dw 7+41 ; 書き出し位置 x
dw 38 ; y
dw 25 ; next offset x
dw 0 ; next offset y
dw 1 ; gyo suu
db 'を書き換えます',0
dw 0,0
mozidt2:
call sub_edi
dw 0 ;screen_no
dw 15 ; mozi_color
dw 7 ; 書き出し位置 x
dw 38 ; y
dw 25 ; next offset x
dw 0 ; next offset y
dw 1 ; gyo suu
db '前のノートは消えます',0
dw 0,0
mozidt3:
call sub_edi
dw 0 ;screen_no
dw 15 ; mozi_color
dw 7+41 ; 書き出し位置 x
dw 38 ; y
dw 25 ; next offset x
dw 0 ; next offset y
dw 1 ; gyo suu
db ' パレットページです',0
dw 0,0
; [count][sz_x][sz_y][off_x][off_y][+x][+y][f_col][b_col][s_no]
;--------------------------------
palon0:
mov dx,0448h ; video output controler I/O address
mov al,01b ; select priority register
out dx,al
;R 448 al=1
; プライオリティレジスタ
mov dx,044Ah ; video output controler I/O data
mov al,00001000b ; layer 0 pallet use
out dx,al ; forground layer 0
ret
;****************************************
palon1:
mov dx,0448h ; video output controler I/O address
mov al,01b ; select priority register
out dx,al
mov dx,044Ah ; video output controler I/O data
mov al,00101000b ; layer 1 pallet, forground layer 0
out dx,al
ret
;****************************************************
;画面0 のパレット獲得
pal0_get:
call ds_pal0
mov edi,esi
push ds
pop es
mov ecx,16
p_get0:
mov al,16
sub al,cl
call getpal ; set pallet
loop p_get0
ret
;*****************************************
; 画面1のパレットGET
pal1_get:
call ds_pal1 ;mov esi,offset paldat1
mov edi,esi
push ds
pop es
mov ecx,16 ;paldat1N
p_get1:
mov al,16
sub al,cl
call getpal ; set pallet
loop p_get1
ret
;*****************************************
; buf を パレットレジスタにset
pal0_set:
call ds_pal0
mov ecx,16 ;paldat1N
p_set1:
mov al,16
sub al,cl
call setpal ; set pallet
loop p_set1
ret
;*******************************
; setpal : set pallet data
;
; in : (ds:esi) = data address
; al = pal no.
; use: dx
;
setpal:
mov dx,0FD90h ; pallet code
out dx,al ; al=pal no.
mov dx,0FD92h ; blue pallet data
outsb
mov dx,0FD94h ; red pallet data
outsb
mov dx,0FD96h ; green pallet data
outsb
ret
;**************************************
getpal:
mov dx,0FD90h ; pallet code
out dx,al
mov dx,0FD92h ; blue pallet data
insb
mov dx,0FD94h ; red pallet data
insb
mov dx,0FD96h ; green pallet data
insb
ret
;-------------
ds_pal0:
call sub_esi
db 3*17 dup (0)
ds_pal1:
call sub_esi
db 3*17 dup (0)
;********************
; パレットノートを初期化する
; ds_pal0 に パレットデータが有ること
; es 使用
b_note: ;パレットノートの初期化
mov ebx,64 ; 転送回数
mov edx,16*3 ;パレット色数
mov ecx,16*3
mov ax,114h ;スプライト セレクタ
mov es,ax
mov edi,0 ;転送先 offset
cld
b_note1:
call ds_pal0 ;esi=pal data head
rep movsb
mov ecx,edx
dec ebx
cmp ebx,0
jne b_note1
push ds
pop es
mov dx,114h
mov edi,0
mov ah,100
mov al,32 ;パレットノートの有る番地
call komei
ret
;-------------------------------
from_note:
call dd_pal ;ページデータ
movzx eax,word ptr [edx]
mov ebx,3*16
mul ebx
mov edi,eax ;edi = page
call ds_pal1
xchg esi,edi
push ds
mov ax,114h
mov ds,ax
mov ecx,16*3
rep movsb
pop ds
ret
;*****************************************
to_note:
call dd_pal
movzx eax,word ptr [edx]
mov ebx,3*16
mul ebx
mov edi,eax ;edi = page
call ds_pal1
mov ax,114h
mov es,ax
cld
mov ecx,16*3
rep movsb
push ds
pop es
ret
ds_ma:
call sub_esi
dw 0